home *** CD-ROM | disk | FTP | other *** search
/ System Booster / System Booster.iso / Archives / ForCLI / 0Utils13.lha / 0Utils / SRun.c < prev    next >
C/C++ Source or Header  |  1995-04-10  |  4KB  |  171 lines

  1.  
  2. /******************************************************************************
  3.  
  4.     MODULE
  5.     SRun.c
  6.  
  7.     DESCRIPTION
  8.     Run a command synchroneously (usable e.g. to redirect a script)
  9.  
  10.     NOTES
  11.     Kickstart 2.0+ required
  12.     compiles w/ SAS/C v6.51
  13.  
  14.     BUGS
  15.     "SRun COMMAND commandstring" fails; U _MUST_ use
  16.     "SRun commandstring"
  17.  
  18.     TODO
  19.  
  20.     EXAMPLES
  21.  
  22.     SEE ALSO
  23.  
  24.     INDEX
  25.  
  26.     HISTORY
  27.     20-02-95 b_noll created
  28.     21-02-95 b_noll added version/format-prefix/offset
  29.     20-03-95 b_noll added args diagnostics
  30.     09-04-95 b_noll shortened the file: arg Parsing dropped, removed NP_tags
  31.  
  32.     AUTHOR
  33.     Bernd Noll, Brunnenstrasse 55, D-67661 Kaiserslautern
  34.     b_noll@informatik.uni-kl.de
  35.  
  36. ******************************************************************************/
  37.  
  38. /**************************************
  39.         Includes
  40. **************************************/
  41.  
  42. #ifndef   EXEC_LIBRARIES_H
  43. # include <exec/libraries.h>
  44. #endif /* EXEC_LIBRARIES_H */
  45.  
  46. #ifndef   CLIB_EXEC_PROTOS_H
  47. # include <clib/exec_protos.h>
  48. #endif /* CLIB_EXEC_PROTOS_H */
  49.  
  50. #ifndef   DOS_DOS_H
  51. # include <dos/dos.h>
  52. #endif /* DOS_DOS_H */
  53.  
  54. #ifndef   CLIB_DOS_PROTOS_H
  55. # include <clib/dos_protos.h>
  56. #endif /* CLIB_DOS_PROTOS_H */
  57.  
  58. #include <proto/dos.h>
  59. #include <proto/exec.h>
  60.  
  61. /* ******************** USER INCLUDES ******************** */
  62.  
  63. #include <dos/dostags.h>
  64.  
  65. /* ******************** USER INCLUDES ******************** */
  66.  
  67. /**************************************
  68.      Defines & Structures
  69. **************************************/
  70.  
  71. #ifndef ABSEXECBASE
  72. #define ABSEXECBASE ((struct ExecBase **)4L)
  73. #endif
  74.  
  75. struct _arg {
  76. /* ******************** USER FORMAT ******************** */
  77.  
  78. #define FORMAT "COMMAND/F"
  79.  
  80.     STRPTR command;
  81.  
  82. /* ******************** USER FORMAT ******************** */
  83. }; /* struct _argv */
  84.  
  85. #define MAXPATHLEN 256
  86. #define MAXLINELEN 256
  87.  
  88. #define VERSIONPREFIX    "\0$VER: "
  89. #define VERSIONOFFSET    0
  90. #define FORMATPREFIX    "\0$ARG: "
  91. #define FORMATOFFSET    7
  92.  
  93. /**************************************
  94.         Implementation
  95. **************************************/
  96.  
  97. long _main (void)
  98. {
  99.     const char* version = VERSIONPREFIX "SRun 1.2 " __AMIGADATE__  + VERSIONOFFSET;
  100.     long retval = RETURN_FAIL;
  101.     struct ExecBase*SysBase = *ABSEXECBASE;
  102.     struct Library* DOSBase;
  103.  
  104.     if (DOSBase = OpenLibrary (DOSNAME, 37)) {
  105. #ifdef PARSE
  106.     struct _arg argv = { 0 };
  107.     APTR   args;
  108.  
  109.     retval     = RETURN_ERROR;
  110.     if (args = (void*)ReadArgs(FORMATPREFIX FORMAT + FORMATOFFSET, (LONG*)&argv, NULL)) {
  111.  
  112.         retval = RETURN_OK;
  113. /* ******************** USER BODY ******************** */
  114.  
  115. #if 1
  116.  
  117.         /* ---- this way does work */
  118.  
  119.         retval = SystemTags (
  120.         argv.command,
  121.         //NP_Input, Input(),
  122.         //NP_CloseInput, FALSE,
  123.         //NP_Output, Output(),
  124.         //NP_CloseOutput, FALSE,
  125.         TAG_END);
  126.  
  127.         if (retval == -1) {
  128.         retval = RETURN_ERROR;
  129.         //PrintFault(IoErr(), argv.command);
  130.         } /* if */
  131.  
  132. #else
  133.  
  134.         /* ---- this way does _NOT_ work. Because the */
  135.         /*        process waits for EOF on Input()?     */
  136.  
  137.         if (!Execute (argv.command, Input(), Output())) {
  138.         retval = RETURN_ERROR;
  139.         //PrintFault (IoErr(), argv.command);
  140.         } /* if */
  141.  
  142. #endif
  143.  
  144. /* ******************** USER BODY ******************** */
  145.         FreeArgs (args);
  146.     } /* if */
  147. #else
  148.     STRPTR template = FORMATPREFIX FORMAT;
  149.  
  150.     retval = SystemTagList (GetArgStr(), NULL);
  151.         //TAG_IGNORE,     template,
  152.         //TAG_END);
  153.  
  154.     if (retval == -1) {
  155.         retval = RETURN_ERROR;
  156.     } /* if */
  157.  
  158. #endif
  159.  
  160.     if (retval > RETURN_WARN)
  161.         PrintFault(IoErr(), "SRun");
  162.  
  163.     CloseLibrary (DOSBase);
  164.     } /* if */
  165.     return (retval);
  166. } /* _main */
  167.  
  168. /******************************************************************************
  169. *****  END SRun.c
  170. ******************************************************************************/
  171.